import { getCart } from '../../api/api.js';
import { delGood } from '../../api/api.js';
import { changeNum } from '../../api/api.js';
const app = getApp();
// 每次计算完折扣信息要重新计算总价



Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartsData: [],
     // 用来标识下面的全选按钮是不是已经全选了 true or false
    allChecked:false,
    allPrice:0,
    countFlag:false
    
  },



  onLoad: function(options) {
    let that = this;

  },


  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {
      app.loginFilter();
      // 获取openid
      let openid = wx.getStorageSync('loginInfo').openid;
      console.log(openid); 
      console.log("购物车")
      getCart(openid).then(res => {
          console.log(res,"购物车数据。。。。。");
          if(res.data.code == 200){
             //处理数据格式
             this.parseData(res.data.data);
          }else{
              wx.showToast({
                title:res.data.msg,
                icon:"none"
              })
          }
      })
      this.initData();
  },


  initData(){
      this.setData({
        allChecked:false,
        allPrice:0 
      })
  },

  // 解析数据与格式
  parseData(data){
            let storeList = data;
            console.log(data,"解析数据")
            if(storeList.length<1){
                this.setData({
                  cartsData:[]
                })
                return;
            }
            storeList.forEach(item => {
                //item 是店铺列表的一个item 指代一个店铺
                // 这里是引用类型，你从item里面拿出了goodslist 
                // 当你更改goodslist的时候实际上是修改了最初的那个数据。
                let list = item.goodsList;
                list.forEach(ite =>{
                   // 重新设置时间的格式
                   ite.createDate = ite.createDate.substring(0,10);
                   // 处理规格的格式
                   let specArray = [];
                   let spec = JSON.parse(ite.specName);
                   for(let i in spec){
                      specArray.push(spec[i]);
                   }
                   // 把新的数组放回原来的ite 里面
                   ite.specName = specArray;
                })

                console.log("循环完毕")
              
            })

            //在做一个循环，用来解析折扣后的价格
            this.computedDiscountPrice(storeList);
  },




// 点击下方的结算按钮
  onClickButton(){
     console.log("去结算");
      //检查有没有选中商品
      //直接判断金额，如果是0 元的话，那么就算没有买东西
      if(this.data.allPrice<=0){
          wx.showToast({
            title: '您什么都没有买哦',
            icon:'none'
          })
          return;
      }

      let cartsData = this.data.cartsData;
      //  分离出被选中的cartsData
       cartsData = cartsData.filter(store=>{
             let goodsList = store.goodsList;
              // 先把goodslist里面没有选中的剥离出来
              goodsList = goodsList.filter(good=>{
                   return good.checked == true;
              })

              store.goodsList = goodsList;
              // 然后把店铺下面没有商品的剥离出来 
              // 根据goodlist 的长度判断当前的store 要不要留下来
              return store.goodsList.length>0;
       })
          
        console.log(cartsData);
        cartsData = JSON.stringify(cartsData);
        wx.navigateTo({
            url: '/pages/pay/pay?data='+cartsData,
        })
  },

  //点击下方的全选按钮
  allChange(){
      console.log("点击下方的全选按钮");
      // 改变全选标志的值
      let allChecked = this.data.allChecked;
      this.setData({
         allChecked:!allChecked
      })
      // 改变所有的商品的checked 和这个保持一致
       let cartsData = this.data.cartsData;
        //遍历店铺
        cartsData.forEach(item =>{
            // 设置所有的的 店铺的checked
            // item 是一个store 对象
           item.checked = !allChecked;
            //修改店铺下面的所有的checked
           item = this.assignInStore(item,!allChecked);  
        })
        // 把cartdatas 赋值回去
         this.setData({
             cartsData,
         })
        // 重新计算总价
        this.getAllPrice()
  },

  // 计算总价
  getAllPrice() {
    let allPrice = 0;
    let cartsData = this.data.cartsData;
    cartsData.forEach(item => {
      let goodsList = item.goodsList;
      goodsList.forEach(goods => {
        if(goods.checked ==true){
          
          // 判断是不是存在折扣
          // if(goods.discountPrice){
          //   allPrice += goods.discountPrice;
          // }else{
          //   allPrice += goods.goodsAmount * goods.goodsPrice;
          // }
          console.log("折扣价-----"+goods.discountPrice,allPrice);
          allPrice += Number(goods.discountPrice)
        }
      })
    })

    console.log("重新计算总价=================================",allPrice)

    this.setData({
      allPrice,
    })
  },










  // 计算出折扣信息放进商品信息里面
   computedDiscountPrice(data){
      let that = this;
       console.log("执行第二个循环")
        let cartsData = data;
     
          // 底下会显示计算之后的总价。
        cartsData.forEach(item =>{
          let goodsList = item.goodsList;
          goodsList.forEach(goods => {
              let countFlag = false;
              //获取商品的单价
              let price = goods.goodsPrice; 
              // 获取到商品的价格和数量
              let num = goods.goodsAmount;
              // 获取每一个商品的折扣信息
              let countList = goods.goodsBulkSalesObj;
              //1 先根据num 找出对应的折扣信息那个item 
              let count = 1;
              // 遍历判断是不是有折扣信息
              countList.forEach(item=>{
                    //存在折扣信息
                    if(countList.length>0){
                        console.log("countList > 0")
                        let first = countList[0];
                        console.log(first);
                        // 如果比第一个的minNum 大的话一定是存在折扣信息的
                        // 现在就是要判断存在于哪一个折扣区间
                        if(num>=first.minNum){
                          console.log("一定存在折扣")

                          countFlag = true;
                          that.setData({
                            countFlag:true
                          })


                            for(let i=1;i<countList.length;i++){
                              if(num<countList[i].minNum&&num>=countList[i-1].minNum){
                                count=countList[i-1].discount;
                              }
                            }
                            // 那么就是没有匹配到区间
                            // 那么就使用最后一个的折扣信息
                            if(count==1){
                              count=countList[countList.length-1].discount;
                            }
                        }else{
                            //存着折扣信息，但是数量没有达到折扣的标准。count使用默认值1 不会变
                            // 不需要处理
                            
                        }
                    }else{
                        //没有折扣信息不需要处理，cout 使用默认值1
                    }
              })
              //  一个循环结束只能确认一个折扣信息
              // 如果当前的数量存在于两个区间里面（对应两个折扣信息）那么第一个会被第二个覆盖。
              // 如果一个都没有匹配出来的话，那么折扣使用默认的1，这样乘以折扣的话会是原来的值
              //2 然后根据折扣信息里面的count 来重新计算当前的价格，
              // price*num*count
              // 判断是不是有折扣
              //一个商品的价格
              // if(that.data.countFlag == true){
              //     // 那么说明有折扣信息
              //     let onePrice = count*price * 0.1*num;
              //     goods.discountPrice = onePrice.toFixed(2);

              //     // 有折扣信息的话，那么添加一个标志，然后在总金额那里添加一个标志
              // }else{
              //     // 把折扣信息放进商品里面的一个字段
              //     goods.discountPrice = false;
              //     // 如果当前商品没有折扣信息的话
              //     // 那么使用默认的价格来计算总价
              // }
 
            let oneGoodPrice = 0;
            if(countFlag == true){
                // 一个商品的总价
                oneGoodPrice = Number(num*price*count*0.1).toFixed(2);
                goods.discountPrice = oneGoodPrice;
                // 有折扣信息的话，那么添加一个标志，然后在总金额那里添加一个标志
                console.log(price,":price",count,":折扣信息")
                console.log("oneGoooood-------",oneGoodPrice);
            }else{
              oneGoodPrice = Number(num*price*count).toFixed(2);
              goods.discountPrice = oneGoodPrice;
              // 有折扣信息的话，那么添加一个标志，然后在总金额那里添加一个标志
              console.log(price,":price",count,":折扣信息")
              console.log("oneGoooood-------",oneGoodPrice);
                
                // 把折扣信息放进商品里面的一个字段
                // goods.discountPrice = false;
                // 如果当前商品没有折扣信息的话
                // 那么使用默认的价格来计算总价
                // 这里是一个商品的多个数量的总价
                // oneGoodPrice = goods.goodsPrice*num;
            }



          })
 

          item.goodsList = goodsList;
        })

        this.setData({
           cartsData
        })

        //每次计算完折扣信息要重新计算总价
        this.getAllPrice();
        
   },





// 改变商品的数量
  changeNum(e){
    //  console.log(e.currentTarget.dataset.goodsidx)
    //  console.log(e.currentTarget.dataset.storeidx)
     console.log("改变商品的数量");
     //根据店铺索引和商品索引来找到商品，然后改变字段
    let storeIdx = e.currentTarget.dataset.storeidx;
    let goodsIdx = e.currentTarget.dataset.goodsidx;

    let cartsData = this.data.cartsData;
    let goodsList = cartsData[`${storeIdx}`].goodsList;
    let goods = goodsList[`${goodsIdx}`];

    // console.log(e.detail)
    
    goods.goodsAmount = e.detail;
    //重新赋值
    // console.log(goods.goodsAmount)

    // goods 放回goodslist 中
    goodsList[`${goodsIdx}`] = goods;
    // goodslist 放回 cartsData 其中一个 store 中
    cartsData[`${storeIdx}`].goodsList = goodsList;
    // cartsData 放回 data 中
    this.setData({
       cartsData,
    })
    // console.log(wx.getStorageSync('loginInfo'))
    let data = {
       amount: e.detail,
       openId:wx.getStorageSync('loginInfo').openid,
       id:goods.id
    }

    
    // 发送请求改变单个商品的数量
    changeNum(data).then(res=>{
        console.log(res);
    })
    let cartsData1 = this.data.cartsData;
    // 重新计算总价computedDiscountPrice
    this.computedDiscountPrice(cartsData1);

    // console.log(this.data.cartsData)
  },


  // 改变某个商品的选中状态 
  // 每次执行这个的时候要去判断店铺是不是已经全选了
  // 要去判断所有的商品是不是全选了
  goodsCheck(e){
        console.log("改变某个商品的选中状态");
        console.log(e.currentTarget.dataset);
        let goodsIdx = e.currentTarget.dataset.goodsidx;
        let storeIdx = e.currentTarget.dataset.storeidx;

        // 根据index 确定当前的 item 对象
        let cartsData = this.data.cartsData;
        let goodsList = cartsData[`${storeIdx}`].goodsList;
        console.log(cartsData)
        let goods = goodsList[`${goodsIdx}`];

        if(goods.checked == undefined){
            //  如果没有这个字段那么是默认的状态
            // 默认的状态就是没有选中
            goods.checked = true;
        }else{
            // 取反
            goods.checked = !(goods.checked);
        }


        //重新赋值
        // console.log(goods.goodsAmount)

        // goods 放回goodslist 中
        goodsList[`${goodsIdx}`] = goods;
        // goodslist 放回 cartsData 其中一个 store 中
        cartsData[`${storeIdx}`].goodsList = goodsList;
        // cartsData 放回 data 中
        this.setData({
          cartsData,
        })


        this.checkStoreIsChecked(storeIdx);

        console.log(this.data.cartsData)
        // 重新计算总价
        this.getAllPrice();

  },

// 检查店铺是不是被全选了
  checkStoreIsChecked(storeIdx){
      // 获取到当前的store
      // 遍历store下面的goods 的checked
      let cartsData = this.data.cartsData;
      let store = cartsData[`${storeIdx}`];
      let goodsList = store.goodsList;
      let flag = true;
      goodsList.forEach(good=>{
           if(good.checked==false||good.checked == undefined){
               flag = false;
           }
      })

      // 根据flag 确定店铺是不是全选了
      store.checked = flag;
      cartsData[`${cartsData}`] = store;
      this.setData({
         cartsData,
      })

        //检查是不是全选了所有的商品
        // 要在检查完店铺之后检查这个 
      this.checkIsAllChecked();
      


  },


    //检查是不是全选了商品
    //只需要遍历店铺是不是都是checked 就ok 了
    //检查是不是全选了所有的商品
    //要在检查完店铺之后检查这个 
   checkIsAllChecked(){
        let cartsData = this.data.cartsData;
        let checked = true;
        cartsData.forEach(item=>{
             if(item.checked == false|| item.checked == undefined){
                  checked = false;
             }
        })

        this.setData({
            allChecked:checked
        })
   },








  //改变店铺的选中状态 
  storeChange(e){
     console.log("改变店铺的选中状态"+e.currentTarget.dataset.storeidx);
     let storeIdx = e.currentTarget.dataset.storeidx;
      //根据index获取店铺对象 
     let cartsData = this.data.cartsData;
     let store = cartsData[`${storeIdx}`];
     console.log(store);
     if(store.checked == undefined){
        store.checked = true;
        store = this.assignInStore(store,true);
     }else{
         store.checked = !(store.checked);
         //店铺下面的所有产品checked 保持和店铺的一样  
         store = this.assignInStore(store,store.checked);
     }


      // 重新赋值回去  
     cartsData[`${storeIdx}`] = store;
     this.setData({
       cartsData,
     })
      
      // 检查是不是全选了所有商品
      this.checkIsAllChecked();

    // 重新计算总价
    this.getAllPrice();

  },
  

  // 改变店铺下面的所有的商品的状态然后返回店铺列表
   assignInStore(store,flag){
      // 拿到店铺对象
      let goodsList = store.goodsList;
      // 循环遍历每一个商品,修改值
      goodsList.forEach(item =>{
          item.checked = flag;
      })

      //赋值回去
      store.goodsList = goodsList;
       // 返回修改过的店铺对象
      return store;
   },



  




  // 进入店铺
  toStore(e){
     let id = e.currentTarget.dataset.id
     console.log("进入店铺");
     wx.navigateTo({
       url:'/pages/shop/shop?id='+id,
     })
  },


// 进入商品详情页面
  toDetail(e){
  
     console.log("进入详细信息",e.currentTarget.dataset.id);
     wx.navigateTo({
       url: '/pages/goodsDetails/goodsDetails?id='+e.currentTarget.dataset.id,
     })
  },


  // 删除购物车里的商品
  delGood(e){
     console.log("删除商品");
     console.log(e.currentTarget.dataset)
     let goodIdx = e.currentTarget.dataset.goodidx;
     let storeIdx = e.currentTarget.dataset.storeidx;
     let cartsData = this.data.cartsData;
     let store = cartsData[`${storeIdx}`];
     let goodsList = store.goodsList;
     let goods = goodsList[`${goodIdx}`];
     let idList = [];
     idList.push(goods.id);
   

     let data = {
         openId:wx.getStorageSync('loginInfo').openid,
         idList

     }



     delGood(data).then(res=>{
         console.log(res);
         if(res.statusCode == 200){
              if(res.data.code == 200){
                  wx.showToast({
                    title: '删除成功',
                  })
                  this.onShow();
              }else{
                  wx.showToast({
                    title:'服务器错误',
                    icon:'none'
                  })
              }
         }else{
            wx.showToast({
              title: '网络错误',
            })
         }
     })

  },



  // 批量删除
delGoods(e) {

    let cartsData = this.data.cartsData;
    let idList = [];
    cartsData.forEach(store => {
      let goodsList = store.goodsList;
      goodsList.forEach(good => {
         if(good.checked){
            idList.push(good.id);
         }
      })
    })

    if(idList.length<=0){
       wx.showToast({
         title: '您什么都没有选哦',
         icon:'none'
       })
       return;
    }
    
    // 
    let data = {
      openId: wx.getStorageSync('loginInfo').openid,
      idList
    }

    delGood(data).then(res => {
      console.log(res);
      if (res.statusCode == 200) {
        if (res.data.code == 200) {
          wx.showToast({
            title: '删除成功',
          })
          this.onShow();
        } else {
          wx.showToast({
            title: '服务器错误',
            icon: 'none'
          })
        }
      } else {
        wx.showToast({
          title: '网络错误',
        })
      }
    })
  },


  // 去支付
  toPay(e){
      let dataset = e.currentTarget.dataset;
      console.log(e.currentTarget.dataset);
      console.log("去支付");
      let goodIdx = dataset.goodidx;
      let storeIdx = dataset.storeidx;
      let store = this.data.cartsData[`${storeIdx}`];
      let good = store.goodsList[`${goodIdx}`];
      let goodsList = []
      goodsList.push(good);
      store.goodsList = goodsList;
      let cartsData = []
      cartsData.push(store);
      console.log(store,"store-----");

      cartsData = JSON.stringify(cartsData);
      wx.navigateTo({
          url: '/pages/pay/pay?data='+cartsData+"&flag=cart",
      })
  },






























  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  }
})